﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TCC_Hotel.Entidades;
using TCC_Hotel.Serviços.BDServices;

namespace TCC_Hotel.Apresentacao.FluxoHospedesAgora
{
    public partial class ListarHospedesAntigos : System.Web.UI.Page
    {
        List<Fluxo_Hospedes> fluxoHospedes = null;
        FluxoHospedesService servico = new FluxoHospedesService();

        /// <summary>
        /// Carregamento da página
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            //Recupera o usuario corrente
            string usuario = Request.ServerVariables["AUTH_USER"].ToString();
            LoginService servico_Login = new LoginService();
            //Verifica permissao ao acesso da página
            if (!servico_Login.RecuperarPermissaoCache(usuario).Hospedes_Antigos)
            {
                //Redireciona para a pagina inicial
                Response.Redirect("~/");
            }

            if (!IsPostBack)
            {
                //recupera todos os hóspedes faturados do banco de dados          
                ReloadGridView();
            }

        }

        /// <summary>
        /// Faz o reload do gridview quando necessário e consulta o cache
        /// </summary>
        private void ReloadGridView()
        {
            //Consulta as reservas de hóspedes faturados no banco e verifica o cache
            fluxoHospedes = servico.ListarFluxoHospedesAntigosCache();

            //busca por qualquer um dos nomes
            fluxoHospedes = fluxoHospedes.Where(i => i.Nome_1.ToUpper().Contains(txtBusca.Text.ToUpper())
                || i.Nome_2.ToUpper().Contains(txtBusca.Text.ToUpper())
                || i.Nome_3.ToUpper().Contains(txtBusca.Text.ToUpper())
                || i.Nome_4.ToUpper().Contains(txtBusca.Text.ToUpper())
                || i.Nome_5.ToUpper().Contains(txtBusca.Text.ToUpper())).OrderByDescending(i => i.Data_Saida).ToList();


            //popular gridView
            grdHospedes.DataSource = fluxoHospedes;
            grdHospedes.DataBind();


        }

        /// <summary>
        /// Evento do botão de filtrar os nomes para facilitar a busca
        /// </summary>
        protected void btnBusca_Click(object sender, EventArgs e)
        {
            ReloadGridView();
        }

        /// <summary>
        /// Limpa a busca
        /// </summary>
        protected void btnLimpar_Click(object sender, EventArgs e)
        {
            txtBusca.Text = null;
            ReloadGridView();
        }

        /// <summary>
        /// Evento que controla a paginação e verifica o cache
        /// </summary>
        protected void grdHospedes_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            //Consulta as reservas de hóspedes faturados no banco e verifica o cache
            fluxoHospedes = servico.ListarFluxoHospedesAntigosCache();

            //busca por qualquer um dos nomes
            fluxoHospedes = fluxoHospedes.Where(i => i.Nome_1.ToUpper().Contains(txtBusca.Text.ToUpper())
                || i.Nome_2.ToUpper().Contains(txtBusca.Text.ToUpper())
                || i.Nome_3.ToUpper().Contains(txtBusca.Text.ToUpper())
                || i.Nome_4.ToUpper().Contains(txtBusca.Text.ToUpper())
                || i.Nome_5.ToUpper().Contains(txtBusca.Text.ToUpper())).OrderByDescending(i => i.Data_Saida).ToList();

            //Na mudança de pagina, chama o evento de aparecer a lista
            grdHospedes.PageIndex = e.NewPageIndex;

            //popular gridView
            grdHospedes.DataSource = fluxoHospedes;
            grdHospedes.DataBind();

        }


        /// <summary>
        /// Evento de click em algum dos botões 
        /// </summary>
        protected void grdHospedes_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            //Verifica qual o botão que o usuário clicou
            if (e.CommandName == "contaReserva")
            {
                //Recupera os parametros necessarios
                string apartamento = grdHospedes.Rows[Convert.ToInt16(e.CommandArgument)].Cells[1].Text;
                string ID = grdHospedes.Rows[Convert.ToInt16(e.CommandArgument)].Cells[0].Text;
               
                Page page = (Page)HttpContext.Current.Handler;

                string script;
                script = @"window.open(""{0}"", ""{1}"");";

                //mecanismo em javaScript para abrir a página em outra janela
                script = String.Format(script, "./ExibirContaAntigos.aspx?apartamento=" + apartamento + "&id=" + ID, "_blank");
 
                //Script que abre outra janela com a conta do hóspede
                ScriptManager.RegisterStartupScript(page,typeof(Page), "Redirect", script, true);

                               
            }

        }

    }
}